package com.yanggu.flink.datastream_api.partition

import org.apache.flink.streaming.api.scala._

/**
 * rebalance使用的是 Round-Robin 负载均衡算法，可以将输入流数据平均分配到下游的并行任务中去
 */
//rebalance:2> 1
//rebalance:3> 2
//rebalance:4> 3
//rebalance:1> 4
//rebalance:2> 5
object RebalanceDemo {

  def main(args: Array[String]): Unit = {
    // 创建执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)
    // 读取数据源，并行度为 1
    val stream = env.fromElements(1, 2, 3, 4, 5)

    stream
      //rebalance也是默认的分区算法, 因此不调用rebalance也可以
      .rebalance
      .print("rebalance").setParallelism(4)

    env.execute()
  }

}
